bitkeeper revision 1.1327.1.6 (426eade4Z6TUJnbOAc8St0Xt6XDYMw)
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Tue, 26 Apr 2005 21:08:52 +0000 (21:08 +0000)
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Tue, 26 Apr 2005 21:08:52 +0000 (21:08 +0000)
Various tweaks for paravirtualization and debugging

xen/arch/ia64/hypercall.c
xen/arch/ia64/vhpt.c
xen/arch/ia64/xenasm.S
xen/include/asm-ia64/config.h

index f568ee87b7209fddbda41ab24148629f7aa0eef9..3eeff6fe2bd8569a30e5a165abf252f387d4e9cf 100644 (file)
@@ -32,6 +32,14 @@ ia64_hypercall (struct pt_regs *regs)
            case FW_HYPERCALL_PAL_CALL:
                //printf("*** PAL hypercall: index=%d\n",regs->r28);
                //FIXME: This should call a C routine
+#if 1
+               // This is very conservative, but avoids a possible
+               // (and deadly) freeze in paravirtualized domains due
+               // to a yet-to-be-found bug where pending_interruption
+               // is zero when it shouldn't be. Since PAL is called
+               // in the idle loop, this should resolve it
+               ed->vcpu_info->arch.pending_interruption = 1;
+#endif
                x = pal_emulator_static(regs->r28);
                regs->r8 = x.status; regs->r9 = x.v0;
                regs->r10 = x.v1; regs->r11 = x.v2;
@@ -61,7 +69,6 @@ ia64_hypercall (struct pt_regs *regs)
 #endif
                break;
            case FW_HYPERCALL_EFI_GET_TIME:
-               fooefi();
                tv = vcpu_get_gr(ed,32);
                tc = vcpu_get_gr(ed,33);
                //printf("efi_get_time(%p,%p) called...",tv,tc);
index 976adce15c933bf755c3d36796fe8334a7b15a88..b535f9fc56da5877b8368945394b9119ee32a458 100644 (file)
@@ -21,7 +21,20 @@ void vhpt_flush(void)
 {
        struct vhpt_lf_entry *v = (void *)VHPT_ADDR;
        int i, cnt = 0;
+#if 0
+static int firsttime = 2;
 
+if (firsttime) firsttime--;
+else {
+printf("vhpt_flush: *********************************************\n");
+printf("vhpt_flush: *********************************************\n");
+printf("vhpt_flush: *********************************************\n");
+printf("vhpt_flush: flushing vhpt (seems to crash at rid wrap?)...\n");
+printf("vhpt_flush: *********************************************\n");
+printf("vhpt_flush: *********************************************\n");
+printf("vhpt_flush: *********************************************\n");
+}
+#endif
        for (i = 0; i < VHPT_NUM_ENTRIES; i++, v++) {
                v->itir = 0;
                v->CChain = 0;
index 0aee4a1fddd8096807e6fad7b48d144d90eb018d..f04dfea8fa7b1ff5298f8d5c6418faf08e1e6d87 100644 (file)
@@ -190,7 +190,6 @@ GLOBAL_ENTRY(ia64_new_rr7)
 
        movl r22=SHAREDINFO_ADDR
        ;;
-       movl r25=PAGE_SHARED
        movl r25=__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RW)
        ;;
        mov r21=loc5                    // saved sharedinfo physical address
index 2fb1c7c7ca6ecb30c604939c7edd8d039ac2034b..2b3d017cf96a9c0fb9b21da62a20c8cf610e667e 100644 (file)
@@ -251,6 +251,8 @@ extern unsigned int watchdog_on;
 
 #undef CONFIG_X86
 
+#define CONFIG_MCKINLEY
+
 //#define CONFIG_SMP 1
 //#define CONFIG_NR_CPUS 2
 //leave SMP for a later time